#![windows_subsystem = "windows"]
use slint::SharedString;
use winreg::enums::*;
use winreg::RegKey;
use system_shutdown::shutdown;
slint::include_modules!();

// 获取此时关机按钮状态 1 为隐藏，0为显示
fn get_shutdown_btn_status() -> u32{
    let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
    let key_hide_shut_down = hklm.open_subkey("SOFTWARE\\Microsoft\\PolicyManager\\default\\Start\\HideShutDown").unwrap();
    key_hide_shut_down.get_value("value").unwrap()
}
// 改变关机按钮显示状态
fn switch_shutdown_btn_status(status : u32){
    let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
    // 注意，打开Key的方式不同，其功能也不同，要想写入，需要 KEY_WRITE
    let key_hide_shut_down = hklm.open_subkey_with_flags("SOFTWARE\\Microsoft\\PolicyManager\\default\\Start\\HideShutDown", KEY_WRITE).unwrap();
    if status == 0{ // 此时显示关机按钮
        //key_HideShutDown.delete_value("value").unwrap();
        if let Ok(_) = key_hide_shut_down.delete_value("value"){
            println!("删除成功！");
        }else{
            println!("删除失败");
            return;
        }
        key_hide_shut_down.set_value("value", &1u32).unwrap();
    }else if status == 1{ //此时隐藏关机按钮
        // key_HideShutDown.delete_value("value").unwrap();
        if let Ok(_) = key_hide_shut_down.delete_value("value"){
            println!("恢复成功！");
        }else{
            println!("恢复失败");
            return;
        }
        key_hide_shut_down.set_value("value", &0u32).unwrap();
    }else{ // 非预设状态，不进行操作
        
    }
}
// 转化关机按钮显示状态显示结果
fn show_shutdown_btn_stutus() -> SharedString {
    let status = get_shutdown_btn_status();
    match status {
        0 => {
            "关机按钮显示中"
        }
        1 => {
            "关机按钮已隐藏"
        }
        _ => {
            "非预设状态"
        }
    }.to_string().into()
}

fn main(){
    // println!("Reading some system info...");
    // let hklm = RegKey::predef(HKEY_LOCAL_MACHINE);
    // let btnShutdownShow = hklm.open_subkey("SOFTWARE\\Microsoft\\PolicyManager\\default\\Start\\HideShutDown").unwrap();
    // let isHide : u32 = btnShutdownShow.get_value("value").unwrap();
    // println!("{}", isHide);
    let app : App = App::new().unwrap();
    let weak = app.as_weak();
    // 设置状态初始值
    app.set_shutdownBtnStatus(show_shutdown_btn_stutus()); 

    // 主窗口按钮事件循环
    app.global::<Buttons>().on_buttons_pressed(move |name|{
        let app = weak.upgrade().unwrap();
        match name.as_str(){
            "switch" =>{
                switch_shutdown_btn_status(get_shutdown_btn_status());
                app.set_shutdownBtnStatus(show_shutdown_btn_stutus());
            }
            "shutdown"=>{
                // shutdown
                if app.get_input().as_str() == "打卡完成"{
                    app.set_input("即将关闭电脑！".into());
                    shutdown().unwrap();
                }else{
                    app.set_input("注意，请输入打卡完成！".into());
                }
            }
            _=>{

            }
        }
    });
    app.run().unwrap();
    //Ok(())
}